import {DataCategory} from 'sentry/types/core';

import type {Plan} from 'getsentry/types';

const BUDGET_TERM = 'on-demand';

const MM1_CATEGORY_DISPLAY_NAMES = {
  errors: {singular: 'error', plural: 'errors'},
};

const MM1_CATEGORIES = [DataCategory.ERRORS];

const MM1_PLANS: Record<string, Plan> = {
  e1_ac: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 'e1_ac',
    name: 'Enterprise',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'mm2_a',
    maxMembers: null,
    planCategories: {
      errors: [],
    },
    totalPrice: 0,
    reservedMinimum: 0,
    price: 0,
    userSelectable: false,
    allowAdditionalReservedEvents: true,
    contractInterval: 'annual',
    billingInterval: 'monthly',
    allowOnDemand: true,
    onDemandEventPrice: 0.019,
    retentionDays: 90,
    features: [
      'sso-basic',
      'sso-saml2',
      'weekly-reports',
      'data-forwarding',
      'rate-limits',
      'custom-inbound-filters',
      'invoices',
      'discard-groups',
      'integrations-issue-basic',
      'integrations-issue-sync',
      'custom-symbol-sources',
      'relay',
      'extended-data-retention',
    ],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
  e1_auf: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 'e1_auf',
    name: 'Enterprise',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'mm2_a',
    maxMembers: null,
    planCategories: {
      errors: [],
    },
    totalPrice: 0,
    reservedMinimum: 0,
    price: 0,
    userSelectable: false,
    allowAdditionalReservedEvents: true,
    contractInterval: 'annual',
    billingInterval: 'annual',
    allowOnDemand: true,
    onDemandEventPrice: 0.019,
    retentionDays: 90,
    features: [
      'sso-basic',
      'sso-saml2',
      'weekly-reports',
      'data-forwarding',
      'rate-limits',
      'custom-inbound-filters',
      'invoices',
      'discard-groups',
      'integrations-issue-basic',
      'integrations-issue-sync',
      'relay',
      'extended-data-retention',
    ],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
  f1: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 'f1',
    name: 'Free',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'am1_t',
    maxMembers: 1,
    planCategories: {
      errors: [
        {
          price: 0,
          events: 10000,
        },
      ],
    },
    totalPrice: 0,
    reservedMinimum: 10000,
    price: 0,
    userSelectable: true,
    allowAdditionalReservedEvents: false,
    contractInterval: 'monthly',
    billingInterval: 'monthly',
    allowOnDemand: false,
    onDemandEventPrice: 0,
    retentionDays: 30,
    features: [],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
  l1: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 'l1',
    name: 'Large',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'mm2_a',
    maxMembers: null,
    planCategories: {
      errors: [
        {
          price: 49900,
          events: 4000000,
        },
      ],
    },
    totalPrice: 49900,
    reservedMinimum: 4000000,
    price: 49900,
    userSelectable: true,
    allowAdditionalReservedEvents: false,
    contractInterval: 'monthly',
    billingInterval: 'monthly',
    allowOnDemand: true,
    onDemandEventPrice: 0.024,
    retentionDays: 90,
    features: [
      'sso-basic',
      'weekly-reports',
      'data-forwarding',
      'rate-limits',
      'custom-inbound-filters',
      'discard-groups',
      'integrations-issue-basic',
      'integrations-issue-sync',
      'extended-data-retention',
    ],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
  l1_ac: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 'l1_ac',
    name: 'Large',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'mm2_a',
    maxMembers: null,
    planCategories: {
      errors: [
        {
          price: 44900,
          events: 4000000,
        },
      ],
    },
    totalPrice: 538800,
    reservedMinimum: 4000000,
    price: 44900,
    userSelectable: true,
    allowAdditionalReservedEvents: false,
    contractInterval: 'annual',
    billingInterval: 'monthly',
    allowOnDemand: true,
    onDemandEventPrice: 0.019,
    retentionDays: 90,
    features: [
      'sso-basic',
      'weekly-reports',
      'data-forwarding',
      'rate-limits',
      'custom-inbound-filters',
      'discard-groups',
      'integrations-issue-basic',
      'integrations-issue-sync',
      'extended-data-retention',
    ],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
  l1_auf: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 'l1_auf',
    name: 'Large',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'mm2_a',
    maxMembers: null,
    planCategories: {
      errors: [
        {
          price: 538800,
          events: 4000000,
        },
      ],
    },
    totalPrice: 538800,
    reservedMinimum: 4000000,
    price: 538800,
    userSelectable: true,
    allowAdditionalReservedEvents: false,
    contractInterval: 'annual',
    billingInterval: 'annual',
    allowOnDemand: true,
    onDemandEventPrice: 0.019,
    retentionDays: 90,
    features: [
      'sso-basic',
      'weekly-reports',
      'data-forwarding',
      'rate-limits',
      'custom-inbound-filters',
      'discard-groups',
      'integrations-issue-basic',
      'integrations-issue-sync',
      'extended-data-retention',
    ],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
  m1: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 'm1',
    name: 'Medium',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'mm2_a',
    maxMembers: null,
    planCategories: {
      errors: [
        {
          price: 19900,
          events: 1000000,
        },
      ],
    },
    totalPrice: 19900,
    reservedMinimum: 1000000,
    price: 19900,
    userSelectable: true,
    allowAdditionalReservedEvents: false,
    contractInterval: 'monthly',
    billingInterval: 'monthly',
    allowOnDemand: true,
    onDemandEventPrice: 0.024,
    retentionDays: 90,
    features: [
      'sso-basic',
      'weekly-reports',
      'discard-groups',
      'integrations-issue-basic',
      'integrations-issue-sync',
      'extended-data-retention',
    ],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
  m1_ac: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 'm1_ac',
    name: 'Medium',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'mm2_a',
    maxMembers: null,
    planCategories: {
      errors: [
        {
          price: 17900,
          events: 1000000,
        },
      ],
    },
    totalPrice: 214800,
    reservedMinimum: 1000000,
    price: 17900,
    userSelectable: true,
    allowAdditionalReservedEvents: false,
    contractInterval: 'annual',
    billingInterval: 'monthly',
    allowOnDemand: true,
    onDemandEventPrice: 0.019,
    retentionDays: 90,
    features: [
      'sso-basic',
      'weekly-reports',
      'discard-groups',
      'integrations-issue-basic',
      'integrations-issue-sync',
      'extended-data-retention',
    ],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
  m1_auf: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 'm1_auf',
    name: 'Medium',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'mm2_a',
    maxMembers: null,
    planCategories: {
      errors: [
        {
          price: 214800,
          events: 1000000,
        },
      ],
    },
    totalPrice: 214800,
    reservedMinimum: 1000000,
    price: 214800,
    userSelectable: true,
    allowAdditionalReservedEvents: false,
    contractInterval: 'annual',
    billingInterval: 'annual',
    allowOnDemand: true,
    onDemandEventPrice: 0.019,
    retentionDays: 90,
    features: [
      'sso-basic',
      'weekly-reports',
      'discard-groups',
      'integrations-issue-basic',
      'integrations-issue-sync',
      'extended-data-retention',
    ],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
  s1: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 's1',
    name: 'Small',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'mm2_a',
    maxMembers: null,
    planCategories: {
      errors: [
        {
          price: 2900,
          events: 100000,
        },
      ],
    },
    totalPrice: 2900,
    reservedMinimum: 100000,
    price: 2900,
    userSelectable: true,
    allowAdditionalReservedEvents: false,
    contractInterval: 'monthly',
    billingInterval: 'monthly',
    allowOnDemand: true,
    onDemandEventPrice: 0.024,
    retentionDays: 90,
    features: [
      'sso-basic',
      'weekly-reports',
      'integrations-issue-basic',
      'extended-data-retention',
    ],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
  s1_ac: {
    isTestPlan: false,
    availableCategories: [],
    basePrice: 0,
    description: '',
    id: 's1_ac',
    name: 'Small',
    categoryDisplayNames: MM1_CATEGORY_DISPLAY_NAMES,
    categories: MM1_CATEGORIES,
    checkoutCategories: MM1_CATEGORIES,
    onDemandCategories: MM1_CATEGORIES,
    hasOnDemandModes: false,
    trialPlan: 'mm2_a',
    maxMembers: null,
    planCategories: {
      errors: [
        {
          price: 2600,
          events: 100000,
        },
      ],
    },
    totalPrice: 31200,
    reservedMinimum: 100000,
    price: 2600,
    userSelectable: true,
    allowAdditionalReservedEvents: false,
    contractInterval: 'annual',
    billingInterval: 'monthly',
    allowOnDemand: true,
    onDemandEventPrice: 0.019,
    retentionDays: 90,
    features: [
      'sso-basic',
      'weekly-reports',
      'integrations-issue-basic',
      'extended-data-retention',
    ],
    budgetTerm: BUDGET_TERM,
    availableReservedBudgetTypes: {},
  },
};

export default MM1_PLANS;
